package com.fantsey.test.juejin;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定 1 到 9 共 9 个数字，随机将九个数字分成多组，按顺序从每组中任意取出一个数字组成一个新的数字，
 * 使得新组成的数字每位数字相加之和为偶数，求共有多少种组合方法。
 *
 * 具体请配合样例理解。
 *
 * 输入格式
 * 多个整型数字，数字之间用一个空格分隔
 *
 * 输入样例 1：
 * 输入：
 * 123 456 789
 * 147 149 158 167 169 248 257 259 268 347 349 358 367 369
 * 输出：14
 *
 * 输入样例 2：
 * 输入：
 * 123456789
 * 2 4 6 8
 * 输出：4
 *
 * 输入样例 3：
 * 输入：
 * 14329 7568
 * 17 15 46 48 37 35 26 28 97 95
 * 输出：10
 *
 * @author fx
 * @date 2024/12/26
 * @since 1.0
 */
public class Question4 {


    /**
     * 将数据分组，从第一组开始递归遍历，并统计每个分组中一位数字相加之和， 如果遍历完每个组，则计算其和是不是偶数，是偶数就返回1， 否则返回0
     *
     * @param numbers:
     * @return int
     * @author fx
     * @date 2024/12/26
     */
    public static int solution(int[] numbers) {
        // Please write your code here
        List<List<Integer>> numberList = new ArrayList<>();
        for (int i=0; i<numbers.length; i++) {
            String number = String.valueOf(numbers[i]);
            List<Integer> numberListItem = new ArrayList<>();
            for (int j=0; j<number.length(); j++) {
                numberListItem.add(Integer.parseInt(String.valueOf(number.charAt(j))));
            }
            numberList.add(numberListItem);
        }

        return calculate(numberList, 0, 0);
    }


    public static int calculate(List<List<Integer>> numberList, int groupIndex, int groupSum) {
        if (groupIndex == numberList.size()) {
            if (groupSum % 2 == 0) {
                return 1;
            } else {
                return 0;
            }
        }

        int evenNumberCount = 0;
        List<Integer> numberListItem = numberList.get(groupIndex);
        for (int i=0; i<numberListItem.size(); i++) {
            int number = numberListItem.get(i);
            evenNumberCount += calculate(numberList, groupIndex+1, number+groupSum);
        }
        return evenNumberCount;
    }

    public static void main(String[] args) {
        // You can add more test cases here
        System.out.println(solution(new int[]{123, 456, 789}) == 14);
        System.out.println(solution(new int[]{123456789}) == 4);
        System.out.println(solution(new int[]{14329, 7568}) == 10);
    }

}
